package cn.tedu.mall.order.service.impl;

import cn.tedu.mall.common.exception.CoolSharkServiceException;
import cn.tedu.mall.common.pojo.domain.CsmallAuthenticationInfo;
import cn.tedu.mall.common.restful.ResponseCode;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

/**
 * @author zhangyiping
 * @date 2024/1/18
 */
@Component
public class UserInfo {
    // 只能在同一个包中使用，不同包要想使用需继承本类
    protected CsmallAuthenticationInfo getUserInfo() {
        // security上下文对象，如果过滤器解析jwt成功，就会存储一个认证对象
        UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();

        if (authentication != null) {
            return (CsmallAuthenticationInfo) authentication.getPrincipal();
        } else {
            throw new CoolSharkServiceException(ResponseCode.UNAUTHORIZED, "没有登录者信息");
        }
    }

    // 只能在同一个包中使用，不同包要想使用需继承本类
    protected Long getUserId() {
        CsmallAuthenticationInfo userInfo = getUserInfo();
        return userInfo.getId();
    }
}
